`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/16 17:38:45
// Design Name: 
// Module Name: RegisterFile
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module RegisterFile(
input logic clk,
input logic [4:0] RS1,                 //要读的寄存器编号
input logic [4:0] RS2,                 //要读的寄存器编号
output logic [31:0] RegOut1,           //读出内容：Reg[rs1]
output logic [31:0] RegOut2,           //读出内容：Reg[rs2]
input logic [31:0] WD,                 //要写入寄存器的数据
input logic [4:0] RD,                  //写寄存器编号
input logic WE                         //写使能
    );

logic [31:0] RegFile [0:31];
//初始化
initial 
begin
    for(int i=0;i<32;i++)
        RegFile[i]=0;
end
//下降沿写入数据
always_ff@(negedge clk)
begin
    if(WE)
    begin
        if(RD!=0)                       //第0个寄存器不可写
            RegFile[RD]<=WD;
    end
end
//读数据
always_comb
begin
    RegOut1=RegFile[RS1];
    RegOut2=RegFile[RS2];
end
endmodule
